/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hispamail;

import Formularios.JFrameInicio;
import com.thoughtworks.xstream.XStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.MessagingException;

/**
 *
 * @author MCS
 */
public class CBackground extends Thread {

    private volatile boolean running = true;
    private volatile boolean suspend = false;
    private final String pendientes;
    private final String enviados;

    private static File fstatic;
    private static int numfich = 0;

    public CBackground() {
        this.pendientes = JFrameInicio.pendientes.substring(0, JFrameInicio.pendientes.length() - 1);
        this.enviados = JFrameInicio.enviados.substring(0, JFrameInicio.enviados.length() - 1);
    }

    @Override
    public void run() {
        int i = 0;
        //String envios_pend = this.pendientes;

        while (running) {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException ex) {
                Logger.getLogger(CBackground.class.getName()).log(Level.SEVERE, null, ex);
            }

            if (isSuspend()) {
            } else {//Aqui realizamos el proceso background
                //Envío de mensajes pendientes para la cuenta logada
                File dir = new File(this.pendientes);
                String fichero = findNext(this.pendientes, ".xml");
                if (!fichero.isEmpty()) {
                    System.out.println("Encontramos " + fichero);
                    //procesamos el envio del archivo encontrado
                    XStream xstream = new XStream();
                    xstream.alias("correo", CSendmail2.class);

                    CSendmail2 correo = null;
                    boolean err = false;
                    try {
                        //necesitamos cerrar el fichero para luego poder moverlo
                        FileInputStream f = new FileInputStream(fichero);
                        correo = (CSendmail2) xstream.fromXML(f);
                        f.close();
                        
                        correo.mandacorreo();
                        
                        //Lo movemos a enviados
                        File forig = new File(fichero);
                        String fichero_dest = this.enviados + "\\" + forig.getName();

                        if (forig.renameTo(new File(fichero_dest))) {
                            System.out.println("Movemos a " + fichero_dest);
                        } else {
                            System.out.println("Error al mover "+fichero_dest);
                        }

                    } catch (FileNotFoundException ex) {
                        err = true;
                    } catch (MessagingException | IOException ex) {
                        err = true;
                    }

                }

            }
        }//while(running)
    }

    //paramos el thread
    public void parar() {
        this.running = false;
    }

    /**
     * @return the suspend
     */
    public boolean isSuspend() {
        return suspend;
    }

    /**
     * @param suspend the suspend to set
     */
    public void setSuspend(boolean suspend) {
        this.suspend = suspend;
    }

    //Encontramos el primer fichero de la extensión
    public String findFirst(String dir, String ext) {
        File file = new File(dir);
        String ret = "";

        if (!file.exists()) {
            System.out.println(dir + "El directorio no existe");
        }
        File[] listFiles = file.listFiles(new CFilenameFilter(ext));
        if (listFiles.length == 0) {
            //no hay ficheros con la extensión
            System.out.println(dir + " -> no hay ficheros con la extensión");
        } else {
            for (File f : listFiles) {
                ret = dir + File.separator + f.getName();
                break;
            }
        }
        return ret;
    }

    //Encontramos el siguiente fichero de la extensión
    public String findNext(String dir, String ext) {
        File file = new File(dir);
        String ret = "";

        if (!file.exists()) {
            System.out.println(dir + "El directorio no existe");
        }

        File[] listFiles = file.listFiles(new CFilenameFilter(ext));
        if (numfich < listFiles.length) {
            ret = dir + File.separator + listFiles[numfich].getName();
            numfich++;

        } else {
            numfich = 0;
        }
        return ret;
    }
}
